Channel
is the Kotlin approach for handling a "hot stream" of items, where the
work to build the items starts immediately, irrespective of whether anyone is
around to consume the results.
A simple way to create a Channel
is to use the produce()
function on CoroutineScope
. You
provide a lambda expression, and it calls send()
for every item that should
be placed into the stream. Here, we send a series of random numbers, with a delay
between each. Since produce()
is defined on CoroutineScope
, though, we need
to either:
Call
produce()
from directly inside of ourlaunch()
coroutine builder (asthis
is aCoroutineScope
in that lambda expression), orDefine our function that uses
produce()
(randomPercentages()
) as an extension function onCoroutineScope
A simple way to consume a Channel
is to call consumeEach()
. This takes a lambda
expression, and it is passed each send item from the Channel
. consumeEach()
is a suspend
function, so we need to call consumeEach()
from inside of another
suspend
function or from a coroutine builder, such as launch()
.